import axios from 'axios'
export default {
  // 先记得开命名空间
  namespaced: true,
  state () {
    return {
      // 保存购物车数据
      cartList: []
    }
  },
  getters: {
    totalCount (state) {

      return state.cartList.reduce((sum, v) => sum += v.count, 0)
    },
    totalPrice (state) {

      return state.cartList.reduce((sum, v) => sum += v.price * v.count, 0)
    },
  },
  // 唯一修改state的是mutations
  mutations: {
    setCartList (state, list) {
      state.cartList = list
    },
    // 修改本地
    changeCount (state, obj) {
      // 因为是一个数组，所以需要先找到要修改的那条数据
      // 所以需要传入一个id。就算我找到了，我要修改数量
      // 要不要知道修改成多少？？所以还要传一个要修改后的数量
      // 那就意味着要传两个参数，但是mutations只能接收一个额外参数
      // 所以传入对象，这个对象里要有id和count两个属性
      // 先根据id找到某个数据
      const item = state.cartList.find(v => v.id === obj.id)
      item.count = obj.count
    }
  },

  actions: {
    async reqCartList (ctx) {
      // 发请求
      const res = await axios({
        url: 'http://localhost:3000/cart'
      })

      ctx.commit('setCartList', res.data)
    },

    async changeCount (ctx, obj) {
      // 发请求
      await axios({
        url: `http://localhost:3000/cart/${obj.id}`,
        method: 'patch',
        data: {
          count: obj.count
        }
      })
      // 保存到本地
      ctx.commit('changeCount', {
        id: obj.id,
        count: obj.count
      })
    }
  }
}
